#define GGI_COLOR_PRECISION 16
#define	T(x)	(((x<<8) + x) >> (16 - GGI_COLOR_PRECISION))
static kgi_color gamma[256] =	/* default gamma translation	*/
{	{ T(  0), T(  0), T(  0) }, { T(  1), T(  1), T(  1) },
	{ T(  2), T(  2), T(  2) }, { T(  3), T(  3), T(  3) },
	{ T(  4), T(  4), T(  4) }, { T(  5), T(  5), T(  5) },
	{ T(  6), T(  6), T(  6) }, { T(  7), T(  7), T(  7) },
	{ T(  8), T(  8), T(  8) }, { T(  9), T(  9), T(  9) },
	{ T( 10), T( 10), T( 10) }, { T( 11), T( 11), T( 11) },
	{ T( 12), T( 12), T( 12) }, { T( 13), T( 13), T( 13) },
	{ T( 14), T( 14), T( 14) }, { T( 15), T( 15), T( 15) },
	{ T( 16), T( 16), T( 16) }, { T( 17), T( 17), T( 17) },
	{ T( 18), T( 18), T( 18) }, { T( 19), T( 19), T( 19) },
	{ T( 20), T( 20), T( 20) }, { T( 21), T( 21), T( 21) },
	{ T( 22), T( 22), T( 22) }, { T( 23), T( 23), T( 23) },
	{ T( 24), T( 24), T( 24) }, { T( 25), T( 25), T( 25) },
	{ T( 26), T( 26), T( 26) }, { T( 27), T( 27), T( 27) },
	{ T( 28), T( 28), T( 28) }, { T( 29), T( 29), T( 29) },
	{ T( 30), T( 30), T( 30) }, { T( 31), T( 31), T( 31) },
	{ T( 32), T( 32), T( 32) }, { T( 33), T( 33), T( 33) },
	{ T( 34), T( 34), T( 34) }, { T( 35), T( 35), T( 35) },
	{ T( 36), T( 36), T( 36) }, { T( 37), T( 37), T( 37) },
	{ T( 38), T( 38), T( 38) }, { T( 39), T( 39), T( 39) },
	{ T( 40), T( 40), T( 40) }, { T( 41), T( 41), T( 41) },
	{ T( 42), T( 42), T( 42) }, { T( 43), T( 43), T( 43) },
	{ T( 44), T( 44), T( 44) }, { T( 45), T( 45), T( 45) },
	{ T( 46), T( 46), T( 46) }, { T( 47), T( 47), T( 47) },
	{ T( 48), T( 48), T( 48) }, { T( 49), T( 49), T( 49) },
	{ T( 50), T( 50), T( 50) }, { T( 51), T( 51), T( 51) },
	{ T( 52), T( 52), T( 52) }, { T( 53), T( 53), T( 53) },
	{ T( 54), T( 54), T( 54) }, { T( 55), T( 55), T( 55) },
	{ T( 56), T( 56), T( 56) }, { T( 57), T( 57), T( 57) },
	{ T( 58), T( 58), T( 58) }, { T( 59), T( 59), T( 59) },
	{ T( 60), T( 60), T( 60) }, { T( 61), T( 61), T( 61) },
	{ T( 62), T( 62), T( 62) }, { T( 63), T( 63), T( 63) },
	{ T( 64), T( 64), T( 64) }, { T( 65), T( 65), T( 65) },
	{ T( 66), T( 66), T( 66) }, { T( 67), T( 67), T( 67) },
	{ T( 68), T( 68), T( 68) }, { T( 69), T( 69), T( 69) },
	{ T( 70), T( 70), T( 70) }, { T( 71), T( 71), T( 71) },
	{ T( 72), T( 72), T( 72) }, { T( 73), T( 73), T( 73) },
	{ T( 74), T( 74), T( 74) }, { T( 75), T( 75), T( 75) },
	{ T( 76), T( 76), T( 76) }, { T( 77), T( 77), T( 77) },
	{ T( 78), T( 78), T( 78) }, { T( 79), T( 79), T( 79) },
	{ T( 80), T( 80), T( 80) }, { T( 81), T( 81), T( 81) },
	{ T( 82), T( 82), T( 82) }, { T( 83), T( 83), T( 83) },
	{ T( 84), T( 84), T( 84) }, { T( 85), T( 85), T( 85) },
	{ T( 86), T( 86), T( 86) }, { T( 87), T( 87), T( 87) },
	{ T( 88), T( 88), T( 88) }, { T( 89), T( 89), T( 89) },
	{ T( 90), T( 90), T( 90) }, { T( 91), T( 91), T( 91) },
	{ T( 92), T( 92), T( 92) }, { T( 93), T( 93), T( 93) },
	{ T( 94), T( 94), T( 94) }, { T( 95), T( 95), T( 95) },
	{ T( 96), T( 96), T( 96) }, { T( 97), T( 97), T( 97) },
	{ T( 98), T( 98), T( 98) }, { T( 99), T( 99), T( 99) },
	{ T(100), T(100), T(100) }, { T(101), T(101), T(101) },
	{ T(102), T(102), T(102) }, { T(103), T(103), T(103) },
	{ T(104), T(104), T(104) }, { T(105), T(105), T(105) },
	{ T(106), T(106), T(106) }, { T(107), T(107), T(107) },
	{ T(108), T(108), T(108) }, { T(109), T(109), T(109) },
	{ T(110), T(110), T(110) }, { T(111), T(111), T(111) },
	{ T(112), T(112), T(112) }, { T(113), T(113), T(113) },
	{ T(114), T(114), T(114) }, { T(115), T(115), T(115) },
	{ T(116), T(116), T(116) }, { T(117), T(117), T(117) },
	{ T(118), T(118), T(118) }, { T(119), T(119), T(119) },
	{ T(120), T(120), T(120) }, { T(121), T(121), T(121) },
	{ T(122), T(122), T(122) }, { T(123), T(123), T(123) },
	{ T(124), T(124), T(124) }, { T(125), T(125), T(125) },
	{ T(126), T(126), T(126) }, { T(127), T(127), T(127) },
	{ T(128), T(128), T(128) }, { T(129), T(129), T(129) },
	{ T(130), T(130), T(130) }, { T(131), T(131), T(131) },
	{ T(132), T(132), T(132) }, { T(133), T(133), T(133) },
	{ T(134), T(134), T(134) }, { T(135), T(135), T(135) },
	{ T(136), T(136), T(136) }, { T(137), T(137), T(137) },
	{ T(138), T(138), T(138) }, { T(139), T(139), T(139) },
	{ T(140), T(140), T(140) }, { T(141), T(141), T(141) },
	{ T(142), T(142), T(142) }, { T(143), T(143), T(143) },
	{ T(144), T(144), T(144) }, { T(145), T(145), T(145) },
	{ T(146), T(146), T(146) }, { T(147), T(147), T(147) },
	{ T(148), T(148), T(148) }, { T(149), T(149), T(149) },
	{ T(150), T(150), T(150) }, { T(151), T(151), T(151) },
	{ T(152), T(152), T(152) }, { T(153), T(153), T(153) },
	{ T(154), T(154), T(154) }, { T(155), T(155), T(155) },
	{ T(156), T(156), T(156) }, { T(157), T(157), T(157) },
	{ T(158), T(158), T(158) }, { T(159), T(159), T(159) },
	{ T(160), T(160), T(160) }, { T(161), T(161), T(161) },
	{ T(162), T(162), T(162) }, { T(163), T(163), T(163) },
	{ T(164), T(164), T(164) }, { T(165), T(165), T(165) },
	{ T(166), T(166), T(166) }, { T(167), T(167), T(167) },
	{ T(168), T(168), T(168) }, { T(169), T(169), T(169) },
	{ T(170), T(170), T(170) }, { T(171), T(171), T(171) },
	{ T(172), T(172), T(172) }, { T(173), T(173), T(173) },
	{ T(174), T(174), T(174) }, { T(175), T(175), T(175) },
	{ T(176), T(176), T(176) }, { T(177), T(177), T(177) },
	{ T(178), T(178), T(178) }, { T(179), T(179), T(179) },
	{ T(180), T(180), T(180) }, { T(181), T(181), T(181) },
	{ T(182), T(182), T(182) }, { T(183), T(183), T(183) },
	{ T(184), T(184), T(184) }, { T(185), T(185), T(185) },
	{ T(186), T(186), T(186) }, { T(187), T(187), T(187) },
	{ T(188), T(188), T(188) }, { T(189), T(189), T(189) },
	{ T(190), T(190), T(190) }, { T(191), T(191), T(191) },
	{ T(192), T(192), T(192) }, { T(193), T(193), T(193) },
	{ T(194), T(194), T(194) }, { T(195), T(195), T(195) },
	{ T(196), T(196), T(196) }, { T(197), T(197), T(197) },
	{ T(198), T(198), T(198) }, { T(199), T(199), T(199) },
	{ T(200), T(200), T(200) }, { T(201), T(201), T(201) },
	{ T(202), T(202), T(202) }, { T(203), T(203), T(203) },
	{ T(204), T(204), T(204) }, { T(205), T(205), T(205) },
	{ T(206), T(206), T(206) }, { T(207), T(207), T(207) },
	{ T(208), T(208), T(208) }, { T(209), T(209), T(209) },
	{ T(210), T(210), T(210) }, { T(211), T(211), T(211) },
	{ T(212), T(212), T(212) }, { T(213), T(213), T(213) },
	{ T(214), T(214), T(214) }, { T(215), T(215), T(215) },
	{ T(216), T(216), T(216) }, { T(217), T(217), T(217) },
	{ T(218), T(218), T(218) }, { T(219), T(219), T(219) },
	{ T(220), T(220), T(220) }, { T(221), T(221), T(221) },
	{ T(222), T(222), T(222) }, { T(223), T(223), T(223) },
	{ T(224), T(224), T(224) }, { T(225), T(225), T(225) },
	{ T(226), T(226), T(226) }, { T(227), T(227), T(227) },
	{ T(228), T(228), T(228) }, { T(229), T(229), T(229) },
	{ T(230), T(230), T(230) }, { T(231), T(231), T(231) },
	{ T(232), T(232), T(232) }, { T(233), T(233), T(233) },
	{ T(234), T(234), T(234) }, { T(235), T(235), T(235) },
	{ T(236), T(236), T(236) }, { T(237), T(237), T(237) },
	{ T(238), T(238), T(238) }, { T(239), T(239), T(239) },
	{ T(240), T(240), T(240) }, { T(241), T(241), T(241) },
	{ T(242), T(242), T(242) }, { T(243), T(243), T(243) },
	{ T(244), T(244), T(244) }, { T(245), T(245), T(245) },
	{ T(246), T(246), T(246) }, { T(247), T(247), T(247) },
	{ T(248), T(248), T(248) }, { T(249), T(249), T(249) },
	{ T(250), T(250), T(250) }, { T(251), T(251), T(251) },
	{ T(252), T(252), T(252) }, { T(253), T(253), T(253) },
	{ T(254), T(254), T(254) }, { T(255), T(255), T(255) }
};
#undef T
	
#define	I(x)	((x*((1 << GGI_COLOR_PRECISION) - 1))/100)
static kgi_color graphics[256] =	/* default VGA palette	*/
 {	{ I(  0), I(  0), I(  0) },	{ I(  0), I(  0), I( 66) },
  	{ I(  0), I( 66), I(  0) },	{ I(  0), I( 66), I( 66) },
  	{ I( 66), I(  0), I(  0) },	{ I( 66), I(  0), I( 66) },
  	{ I( 66), I( 66), I(  0) },	{ I( 66), I( 66), I( 66) },
  	{ I(  0), I(  0), I( 33) },	{ I(  0), I(  0), I(100) },
  	{ I(  0), I( 66), I( 33) },	{ I(  0), I( 66), I(100) },
  	{ I( 66), I(  0), I( 33) },	{ I( 66), I(  0), I(100) },
  	{ I( 66), I( 66), I( 33) },	{ I( 66), I( 66), I(100) },
  
	{ I(  0), I( 33), I(  0) },	{ I(  0), I( 33), I( 66) },
  	{ I(  0), I(100), I(  0) },	{ I(  0), I(100), I( 66) },
  	{ I( 66), I( 33), I(  0) },	{ I( 66), I( 33), I( 66) },
  	{ I( 66), I(100), I(  0) },	{ I( 66), I(100), I( 66) },
  	{ I(  0), I( 33), I( 33) },	{ I(  0), I( 33), I(100) },
  	{ I(  0), I(100), I( 33) },	{ I(  0), I(100), I(100) },
  	{ I( 66), I( 33), I( 33) },	{ I( 66), I( 33), I(100) },
  	{ I( 66), I(100), I( 33) },	{ I( 66), I(100), I(100) },
  
	{ I( 33), I(  0), I(  0) },	{ I( 33), I(  0), I( 66) },
  	{ I( 33), I( 66), I(  0) },	{ I( 33), I( 66), I( 66) },
  	{ I(100), I(  0), I(  0) },	{ I(100), I(  0), I( 66) },
  	{ I(100), I( 66), I(  0) },	{ I(100), I( 66), I( 66) },
  	{ I( 33), I(  0), I( 33) },	{ I( 33), I(  0), I(100) },
  	{ I( 33), I( 66), I( 33) },	{ I( 33), I( 66), I(100) },
  	{ I(100), I(  0), I( 33) },	{ I(100), I(  0), I(100) },
  	{ I(100), I( 66), I( 33) },	{ I(100), I( 66), I(100) },
  
	{ I( 33), I( 33), I(  0) },	{ I( 33), I( 33), I( 66) },
  	{ I( 33), I(100), I(  0) },	{ I( 33), I(100), I( 66) },
  	{ I(100), I( 33), I(  0) },	{ I(100), I( 33), I( 66) },
  	{ I(100), I(100), I(  0) },	{ I(100), I(100), I( 66) },
  	{ I( 33), I( 33), I( 33) },	{ I( 33), I( 33), I(100) },
  	{ I( 33), I(100), I( 33) },	{ I( 33), I(100), I(100) },
  	{ I(100), I( 33), I( 33) },	{ I(100), I( 33), I(100) },
  	{ I(100), I(100), I( 33) },	{ I(100), I(100), I(100) },
  
	{ I(  7), I( 88), I( 57) },	{ I( 69), I( 12), I( 26) },
  	{ I(  1), I( 57), I( 55) },	{ I( 79), I( 82), I( 38) },
  	{ I( 25), I( 57), I(  3) },	{ I( 69), I( 84), I( 96) },
  	{ I( 55), I( 82), I( 17) },	{ I( 53), I( 23), I( 57) },
  	{ I( 44), I( 39), I(  9) },	{ I( 95), I( 38), I(  9) },
  	{ I( 42), I( 55), I(  6) },	{ I( 95), I( 63), I( 84) },
  	{ I( 14), I( 55), I( 17) },	{ I( 12), I(  1), I( 17) },
  	{ I( 22), I( 44), I( 22) },	{ I(  4), I( 12), I( 25) },
  
	{ I( 73), I( 93), I( 20) },	{ I( 77), I( 41), I( 55) },
  	{ I( 11), I(  3), I( 12) },	{ I( 39), I( 58), I( 76) },
  	{ I( 46), I( 50), I(  3) },	{ I( 36), I( 11), I( 66) },
  	{ I( 79), I( 71), I( 61) },	{ I(  1), I( 17), I(  9) },
  	{ I(  0), I( 98), I( 15) },	{ I( 73), I( 71), I( 58) },
  	{ I( 57), I( 50), I( 53) },	{ I( 76), I(  9), I( 41) },
  	{ I( 14), I(  6), I( 26) },	{ I( 12), I( 69), I( 71) },
  	{ I( 44), I( 26), I( 53) },	{ I( 85), I( 20), I( 28) },
  
	{ I( 20), I( 79), I( 20) },	{ I( 38), I( 25), I( 26) },
  	{ I( 25), I( 84), I( 82) },	{ I( 14), I( 82), I( 88) },
  	{ I( 44), I( 47), I( 65) },	{ I( 17), I( 92), I( 42) },
  	{ I( 98), I( 23), I( 57) },	{ I( 98), I( 26), I(  0) },
  	{ I( 87), I( 14), I( 33) },	{ I( 52), I( 50), I(  7) },
  	{ I(  3), I( 73), I(100) },	{ I( 68), I( 12), I( 26) },
  	{ I( 76), I( 79), I( 25) },	{ I( 14), I( 76), I( 63) },
  	{ I( 57), I( 50), I( 42) },	{ I( 85), I( 11), I( 52) },
  
	{ I( 84), I( 77), I(  4) },	{ I( 22), I( 76), I( 93) },
  	{ I( 80), I(  6), I( 68) },	{ I( 98), I( 14), I( 79) },
  	{ I( 69), I(  1), I( 11) },	{ I( 11), I( 82), I( 28) },
  	{ I(  6), I( 50), I( 84) },	{ I( 30), I( 14), I( 11) },
  	{ I( 30), I( 73), I( 52) },	{ I( 66), I( 88), I( 42) },
  	{ I( 57), I( 11), I( 14) },	{ I( 38), I( 17), I( 96) },
  	{ I(  4), I( 25), I(  6) },	{ I( 53), I( 76), I( 28) },
  	{ I( 63), I( 50), I( 96) },	{ I( 33), I(  0), I( 25) },
  
	{ I( 14), I( 65), I( 88) },	{ I( 55), I( 26), I( 71) },
  	{ I( 57), I( 73), I( 88) },	{ I(  0), I( 58), I(  9) },
  	{ I( 80), I( 92), I( 23) },	{ I( 22), I( 74), I( 25) },
  	{ I( 60), I(  3), I( 30) },	{ I( 47), I( 92), I(  3) },
  	{ I( 28), I( 20), I( 84) },	{ I( 74), I( 61), I( 53) },
  	{ I( 19), I( 76), I( 85) },	{ I( 31), I(  0), I( 44) },
  	{ I( 28), I( 69), I( 44) },	{ I( 44), I( 92), I( 93) },
  	{ I( 15), I( 12), I(  0) },	{ I( 15), I( 33), I( 63) },
  
	{ I( 76), I(  9), I( 88) },	{ I( 52), I( 50), I( 52) },
  	{ I( 79), I( 87), I( 19) },	{ I( 84), I( 44), I( 73) },
  	{ I( 65), I(  0), I( 12) },	{ I( 63), I(  0), I( 26) },
  	{ I( 20), I(  6), I( 52) },	{ I( 93), I( 26), I(  9) },
  	{ I( 79), I(  3), I( 69) },	{ I( 26), I( 41), I( 22) },
  	{ I( 82), I( 87), I( 52) },	{ I(  4), I( 84), I( 77) },
  	{ I( 50), I(  0), I(  0) },	{ I( 14), I( 58), I( 93) },
  	{ I( 39), I( 31), I( 96) },	{ I( 26), I( 26), I(  4) },
  
	{ I( 15), I( 69), I( 31) },	{ I( 31), I(  9), I( 82) },
  	{ I( 52), I( 92), I( 44) },	{ I( 46), I(  4), I( 47) },
  	{ I( 52), I(  1), I( 26) },	{ I( 14), I( 92), I( 85) },
  	{ I( 57), I( 57), I(  6) },	{ I( 79), I( 23), I(  0) },
  	{ I( 20), I( 19), I( 46) },	{ I( 26), I( 92), I( 49) },
  	{ I( 71), I( 88), I( 39) },	{ I( 79), I( 47), I(  3) },
  	{ I(  0), I(  3), I( 44) },	{ I(  0), I(  1), I( 33) },
  	{ I( 15), I(  4), I( 39) },	{ I( 26), I( 87), I( 57) },
  
	{ I( 52), I( 57), I( 84) },	{ I( 53), I( 39), I( 53) },
  	{ I( 39), I( 96), I( 41) },	{ I( 12), I( 25), I( 31) },
  	{ I( 31), I(  6), I( 55) },	{ I( 15), I( 25), I( 53) },
  	{ I( 42), I(  0), I(  1) },	{ I(  9), I(  6), I( 95) },
  	{ I( 76), I( 47), I( 93) },	{ I(  6), I(  9), I( 66) },
  	{ I( 12), I( 15), I( 39) },	{ I(  0), I( 41), I( 31) },
  	{ I( 69), I(  6), I( 69) },	{ I(100), I( 95), I( 15) },
  	{ I( 98), I( 82), I( 30) },	{ I( 30), I(  3), I( 28) },
  
	{ I( 68), I( 76), I( 61) },	{ I( 15), I(  7), I( 46) },
  	{ I( 71), I( 61), I( 26) },	{ I( 17), I( 30), I( 44) },
  	{ I( 53), I( 49), I( 12) },	{ I( 57), I( 76), I( 98) },
  	{ I( 92), I( 12), I( 88) },	{ I(  3), I( 14), I( 84) },
  	{ I( 22), I( 63), I(  9) },	{ I( 80), I( 26), I( 74) },
  	{ I( 73), I( 60), I( 60) },	{ I( 76), I( 28), I( 77) },
  	{ I( 63), I( 66), I( 15) },	{ I( 14), I( 19), I( 50) },
  	{ I( 38), I( 60), I(  6) },	{ I( 87), I( 42), I( 25) },
  
	{ I(  1), I( 50), I( 20) },	{ I( 44), I( 63), I( 95) },
  	{ I( 26), I( 49), I( 57) },	{ I( 52), I( 88), I( 93) },
  	{ I( 25), I( 47), I(  1) },	{ I( 28), I( 19), I( 23) },
  	{ I( 50), I( 38), I( 53) },	{ I( 57), I( 33), I( 20) },
  	{ I( 14), I( 44), I(  0) },	{ I( 19), I( 31), I(  1) },
  	{ I( 69), I( 47), I( 42) },	{ I( 19), I( 98), I( 41) },
  	{ I( 14), I( 50), I( 12) },	{ I( 30), I(  4), I( 79) },
  	{ I( 68), I( 15), I( 65) },	{ I( 49), I( 38), I( 87) },
  
	{ I( 50), I( 39), I( 55) },	{ I( 73), I( 44), I( 90) },
  	{ I( 95), I( 31), I( 50) },	{ I( 47), I(  4), I(  4) },
  	{ I( 19), I( 31), I( 17) },	{ I( 39), I( 63), I( 20) },
  	{ I(  0), I( 57), I( 68) },	{ I( 87), I( 93), I( 52) },
  	{ I(  6), I(  9), I( 47) },	{ I( 69), I( 84), I( 57) },
  	{ I( 44), I( 12), I( 42) },	{ I(  1), I( 33), I( 12) },
  	{ I( 77), I( 66), I( 33) },	{ I( 28), I( 52), I(  3) },
  	{ I( 46), I( 82), I( 20) },	{ I( 44), I( 22), I( 12) },
  
	{ I( 41), I( 95), I( 42) },	{ I( 22), I( 93), I(  6) },
  	{ I( 28), I( 77), I( 55) },	{ I( 90), I( 44), I( 80) },
  	{ I( 46), I(  0), I( 34) },	{ I( 61), I(100), I( 68) },
  	{ I(  4), I( 55), I( 76) },	{ I( 84), I( 28), I( 50) },
  	{ I( 26), I( 30), I(  6) },	{ I(  9), I( 68), I(  6) },
  	{ I( 68), I( 85), I( 60) },	{ I( 73), I( 98), I( 52) },
  	{ I( 88), I( 17), I( 77) },	{ I( 95), I( 39), I( 19) },
  	{ I( 63), I( 38), I( 50) },	{ I( 25), I( 90), I( 31) }
};

static kgi_color text[16] =	/* ANSI textmode palette	*/
 {	{ I(  0), I(  0), I(  0) },	{ I(  0), I(  0), I( 66) },
	{ I(  0), I( 66), I(  0) },	{ I(  0), I( 66), I( 66) },
	{ I( 66), I(  0), I(  0) },	{ I( 66), I(  0), I( 66) },
	{ I( 66), I( 66), I(  0) },	{ I( 66), I( 66), I( 66) },
	{ I( 33), I( 33), I( 33) },	{ I( 33), I( 33), I(100) },
	{ I( 33), I(100), I( 33) },	{ I( 33), I(100), I(100) },
	{ I(100), I( 33), I( 33) },	{ I(100), I( 33), I(100) },
	{ I(100), I(100), I( 33) },	{ I(100), I(100), I(100) }
};
#undef I

static kgi_clut default_clut_256 = 
{
	256,		/* number of entries	*/
	graphics	/* look up entries	*/
};

static kgi_clut default_clut_16 =
{
	16,		/* number of entries	*/
	text		/* look up enties	*/
};

static kgi_clut default_gamma =
{
	256,		/* number of entries	*/
	gamma		/* look up entries	*/
};

